Ensure crates are tested after packaged
authorAlex Crichton <alex@alexcrichton.com>
Fri, 21 Nov 2014 06:48:18 +0000 (22:48 -0800)
committerAlex Crichton <alex@alexcrichton.com>
Fri, 21 Nov 2014 06:48:18 +0000 (22:48 -0800)
The `target` directory was erroneously being used from the crate root rather
than the root of the package directory itself, leading to packages not actually
testing what's precisely being published.

src/cargo/ops/cargo_package.rs
src/cargo/ops/cargo_rustc/mod.rs
tests/test_cargo_package.rs

index 25bdfd7143cf709cc9244ac1f192fb37aaee5f42..bac9063c11e4a38dd7ef064117f3232e9be4f544 100644 (file)
@@ -165,6 +165,7 @@ fn run_verify(pkg: &Package, shell: &mut MultiShell, tar: &Path)
     });
     let mut new_manifest = pkg.get_manifest().clone();
     new_manifest.set_summary(new_summary);
+    new_manifest.set_target_dir(dst.join("target"));
     let new_pkg = Package::new(new_manifest, &manifest_path,
                                pkg.get_package_id().get_source_id());
 
index 28ad3c6592063f35d8a449ac906af021f020a513..3c50b2751b76ef0db75579b34b1c44a47fb92567 100644 (file)
@@ -98,7 +98,11 @@ pub fn compile_targets<'a>(env: &str, targets: &[&'a Target], pkg: &'a Package,
     try!(links::validate(deps));
 
     let dest = uniq_target_dest(targets);
-    let root = deps.iter().find(|p| p.get_package_id() == resolve.root()).unwrap();
+    let root = if resolve.root() == pkg.get_package_id() {
+        pkg
+    } else {
+        deps.iter().find(|p| p.get_package_id() == resolve.root()).unwrap()
+    };
     let host_layout = Layout::new(root, None, dest);
     let target_layout = config.target().map(|target| {
         layout::Layout::new(root, Some(target), dest)
index c475b71f1734894499717747478d1a8806eb1790..0ff2983a52c006a8e20a4c98a20c04a0789874c0 100644 (file)
@@ -130,3 +130,28 @@ test!(metadata_warning {
         dir = p.url()).as_slice()));
 
 })
+
+test!(package_verification {
+    let p = project("all")
+        .file("Cargo.toml", r#"
+            [project]
+            name = "foo"
+            version = "0.0.1"
+            authors = []
+        "#)
+        .file("src/main.rs", r#"
+            fn main() {}
+        "#);
+    assert_that(p.cargo_process("build"),
+                execs().with_status(0));
+    assert_that(p.process(cargo_dir().join("cargo")).arg("package"),
+                execs().with_status(0).with_stdout(format!("\
+{packaging} foo v0.0.1 ({dir})
+{verifying} foo v0.0.1 ({dir})
+{compiling} foo v0.0.1 ({dir}[..])
+",
+        packaging = PACKAGING,
+        verifying = VERIFYING,
+        compiling = COMPILING,
+        dir = p.url()).as_slice()));
+})